package com.jzo2o.market.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.jzo2o.common.model.PageResult;
import com.jzo2o.market.model.domain.Activity;
import com.jzo2o.market.model.dto.request.ActivityQueryForPageReqDTO;
import com.jzo2o.market.model.dto.request.ActivitySaveReqDTO;
import com.jzo2o.market.model.dto.response.ActivityInfoResDTO;
import com.jzo2o.market.model.dto.response.SeizeCouponInfoResDTO;

import java.util.List;

/**
 * <p>
 * 服务类
 * </p>
 *
 * @author itcast
 * @since 2023-09-16
 */
public interface IActivityService extends IService<Activity> {


    /**
     * 新增或更新优惠券
     *
     * @param activitySaveReqDTO 活动保存请求的数据传输对象，包含需要保存或更新的优惠券活动信息
     */
    void insertOrUpdate(ActivitySaveReqDTO activitySaveReqDTO);

    /**
     * 分页查询活动信息的方法
     *
     * @param dto 分页查询活动条件的请求DTO，包含分页参数和查询条件
     * @return PageResult<ActivityInfoResDTO> 分页查询结果，包含活动信息列表和分页信息
     */
    PageResult<ActivityInfoResDTO> findByPage(ActivityQueryForPageReqDTO dto);

    /**
     * 根据ID查询活动信息资源数据传输对象
     *
     * @param id 活动资源的唯一标识符
     * @return 返回对应ID的活动信息资源数据传输对象，如果未找到则可能返回null
     */
    ActivityInfoResDTO findById(Long id);

    /**
     * 活动撤销
     *
     * @param id 活动id
     */
    void revoke(Long id);
    /**
     * 修改活动状态
     */
    void updateStatus();

    /**
     * 活动预热(将满足条件的活动,同步到Redis中等待抢券)
     */
    void preHeat();

    /**
     * 用户端抢券列表分页查询活动信息
     *
     * @param tabType 挑选条件 1 疯抢中  2 即将开始
     * @return 活动列表
     */
    List<SeizeCouponInfoResDTO> queryForListFromCache(Integer tabType);

    /**
     * 从缓存中获取活动信息
     *
     * @param id 活动id
     * @return 活动信息
     */
    ActivityInfoResDTO getActivityInfoByIdFromCache(Long id);
}
